EXIT MONITOR ――――――――――――――――――――――――――――――――――――――― アスキー 1981年 6月号掲載 MZ−80K マシン語 09500H−09E37H S:09500H 起動方法 モニタから起動 ――――――――――――――――――――――――――――――――――――――― MZ−80の機械語モニタ EXITモニタを御紹介します。 EXIT(EXamine&deposIT)は ’79年10月号で掲載したAPPLE用の ダンプリスト入力ツールですが、 画面にダンプされているメモリ内容を カーソルコントロールしてダイレクトに書き換えられるものです。 さらにカーソルコントロールは 画面内のアドレスエリアだけで行われるものでなく、 エリアのそものも影響を受けます。 すなわちカーソルの移動が画面で処理しきれなくなると、 必要に応じて自動的にUPスクロール、 又は前の1行8バイトを表示します。 感じとしては、CRTモをメモリマップののぞき窓として カーソルコントロール及び各コマンドで メモリ上を移動し、表示し、書き変えるものです。 また8バイトごとのチェックサムが表示され、 メモリ内容を書き変えるたびに リアルタイムで計算されますので、 チェックサムのついたダンプリストを 入力する際には非常に便利です。 ・−−−−−−−−−−−−−−−−−・ |   プログラムの入力と実行   | ・−−−−−−−−−−−−−−−−−・ プログラムはRAM容量32K以上の MZ−80CまたはK2用になっています。 まず入力にはシャープのマシンラングージSP−2001、 または’81年1月号掲載のBASICによるモニタを使って下さい。 このモニタを使う場合には1月号本丈中の変更を加えて下さい。 入力が終ったらまずSAVEしておいて下さい。 実行はROMモニタからGOTO $9500とします。 するとまず画面がクリアされ EXITモニタのコマンド待ちの状態になります。 これがEXITモニタのモニタコマンド待ちです。 ・−−−−−−−−−−−−−−−−−・ |    モニタのコマンド     | ・−−−−−−−−−−−−−−−−−・ モニタのコマンドは以下の9種があり、 モニタのプロントである“]”が表示されているときに 1文字入力するだけで働きます。 アドレス指定などは すべて16進数によりますので注意して下さい。 E……EXIT  Eに続けて4桁の16進数でアドレスを入力すると、  EXITモードとなります。 G……GO  Gに続けて4桁の16進数でアドレスを指定すると、  そのアドレスからの機械語プログラムにジャンプします。 C……CALL  Cに続けて4桁の16進数でアドレスを指定すると、  そのアドレスからの機械語プログラムにジャンプします。  GOコマンドと異なるのは、最後のリターン命令(C9)で  このモニタに戻るという点です。  なお、GOコマンドでは、どうなるか不定です。 S……SAVE  このコマンドはカセットテープに機械語プログラムを  SAVEするものです。  Sを押すとまず、ファイル名を聞いてきますので  16文字以下の任意の名前を入力して下さい。  次にFROM?、TO?、START?と  3種類のアドレスを聞いてきますので、それぞれ  4桁の16進数で入力してください。  FORM?にはSAVEしたいエリアの先頭番地を、  TO?には最終番地を、  START?にはこのテープをLOADした時の  スタート番地をそれぞれ入力します。  このコマンドでSAVEしたテープは  オートスタートタイプになります。 L……LOAD  テープから、機械語プログラムやデータを  LOADするコマンドです。  Lを押すとすぐPLAYと表示されますので、  LOADしたいテープを装着し  PLAYボタンを押して下さい。  するとファイルネームを読み込んで  これを表示し、LOAD?と聞いてきますので、  LOADする時はYを押して下さい。  それ以外のキーではそのファイルはスキップし、  次のファイルをサーチします。  なお、LOAD中にSHIFT+BREAK押すと  もニタのコマンド待ちに戻りますが、  最後に表示したファイル名を再び表示し、  LOAD?と聞いてくる場合もありますので、  その際にはさらにSHIFT+BREAKを押して下さい。 X……TRANSFER  これはブロック転送をするコマンドです。  Xを押すとFROM?と聞いてきますので、  転送したいブロックの先頭アドレスを  4桁の16進数で入力します。  次にTO?と聞いてきますので、  転送したいブロックの最終アドレスを  同様に入力します。  そしてTOP?と聞いてきますので、  転送先の先頭アドレスを同様に入力します。  その様子を図1に示します。  なお同図Bのように  転送エリアと転送先に重なりあってもかまいません。  ・−−−−−−−−−−−−−−−−−−−−−−−−−−−・  |     |     |               |  |  TOP|−−−−−|               |  |     |     |     |     |   |  |     |転 送 先|  TOP|−−−−−|←・ |  |     |     |     |     | | |  |     |−−−−−|     |転 送 先| | |  |     |  ↑  |     |     | | |  |     |  |  | FROM|−−−−−|−・ |  |     |  |  |     |     |   |  | FROM|−−−−−|     |−−−−−|←・ |  |     |転送   |     |転送   | | |  |     | エリア |     | エリア | | |  |     |     |     |     | | |  |   TO|−−−−−|   TO|−−−−−|−・ |  |     |     |     |     |   |  |     |  A  |     |  B  |   |  ・−−−−−−−−−−−−−−−−−−−−−−−−−−−・  図1 Xコマンドの働き M……128bytes CHECKSUM  128バイトごとのチェックサムを算出し、表示します。  チェックしたいエリアの先頭と  最後のアドレスを入力して下さい。 P……PRINT  EXITの形式でプリンタに  ダンプリストを出力するコマンドです。  Pに続けてダンプブロックの先頭アドレス、  最終アドレスをそれぞれ4桁の16進数で指定します。  なお、チェックサムの算出の都合上、  必ず1行8バイト単位で出力されますから、  たとえあbP 1200 1283とすると  $1200〜$1287を出力することになりますので  注意して下さい。 SHIFT+BREAK……BYE  モニタSP−1002に戻ります。  再びEXITモニタに戻るには  GOTO$9500とします。 ・−−−−−−−−−−−−−−−−−・ |     EXITモード     | ・−−−−−−−−−−−−−−−−−・ モニタのEコマンドでEXITモードになります。 画面構成は左からその行の先頭データのアドレス、 8バイト分のデ−タ、そのASCIIダンプ、 その行のチェックサムとなっています。 このチェックサムは、表示アドレスの上位及び、下位 そして8バイト分の和の下1バイトとなっています。 カーソルはダンプされているデータ上を、 カーソルコントロールキーにより任意に移動できます。 カーソルが画面最上段にある時に、 ↑キーを押すとDOWNスクロールし、前の1行をダンプします。 最下行でも同様にUPスクロールします。 すなわちカーソルが画面内のエリアで移動しきれなくなった時に、 画面がスクロールします。 ダンプされているデータの変更は0〜Fのキーと グラフィックキー部に図2の様に配置されたHEXキーによります。 このHEXキーはEXITモード以外でも 16進数を入力するときに使用可能です。 HEXキー、カーソルコントロールキーの他に 以下の8つのコマンドがあります。  −・ ・−−−−−−−−−・   | | | | | | |  −・ |−+−+−+−+−|   | |7|8|9|A| |  −・ |−+−+−+−+−|   | |4|5|6|B| |  −・ |−+−+−+−+−|   | |1|2|3|C| |  −・ |−+−+−+−+−|   | |0|F|E|D| |  −・ ・−−−−−−−−−・  図2 HEXキーパッド J……ダンプチェンジ  画面の先頭アドレスを変更します。  Jを押すとカーソルが画面左上に移りますので、  4桁の16進数で希望のアドレスを指定して下さい。  ダンプエリアに表示されるアドレスは、  チェックサム算出の関係で末尾が必ず0か8で  なければなりませんので、  EXITモードに移るEコマンドやこのJコマンドで端数を  指定しても、末尾0、8のアドレスからのダンプになります。  但し、カーソルは指定アドレスのデータの部分に移ります。 N……ページチェンジ  画面の次ノアドレスからダンプします。 U……ASCII入力  カーソルが右のASCIIダンプに移動します。  そして以降のキー入力をASCIIコードとして  メモリにストアします。  この場合にもカーソルコントロールキーは  カーソル移動に使用できます。  CRキーは$0Dがストアされます。  16進入力モードに戻るにはCLRキーを押して下さい。 HOME……カーソルホーム  カーソルを画面の最初のダンプの位置に移動します。 INST……インサート  4ビット単位、すなわち16進数の1文字のインサートをします。  現在のカーソル位置に0が入り、その行の残りがその行末にずれ  行末の4ビットは消えます。  もちろんメモリからも消えてしまいます。 DEL……デリート  インサートと同様に4ビット単位でデリートします。  カーソルの1つ左が消えて、  その行はカーソル以降が4ビットずつずれて行末には0が入ります。  インサート、デリートともASCIIコードの入力時には、  それぞれのコードが入力されるので使用できません。 CR……改行  カーソルが次の行の先頭に移動します。  これもASCIIコード入力時には使用できません。 SHIFT+BREAK……リターン  画面はそのままにして、EXITのモニタに戻ります。 ・−−−−−−−−−−−−−−−−−・ |   EXITモニタの拡張    | ・−−−−−−−−−−−−−−−−−・ このEXITモニタは$9500〜$9E31を使用しています。 そしてモニタのコマンは、あと最大10種増すことが可能です。 拡張法は、まずコマンドテーブルの 空きエリア($9D63〜$9D80の30バイト)に、 順にコマンド1文字のASCIIコード、 そのキーに対する飛び先のアドレスを下位、上位順に並びます。 次に$951B番地に全コマンド数(現在は9)をストアします。 あとの10個増せますので最高$13となります。 ・−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−・ |表1 モニタのコマンドサマリ          ※xxxx,yyyyは4桁の16進数 | |−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−| | コマンド |          機        能          | |−−−−−−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−| | E xxxx |xxxxから一画面分ダンプし、EXITモードへ。 | |−−−−−−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−| | G xxxx |xxxxのアドレスへジャンプ。 | |−−−−−−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−| | C xxxx |xxxxのサブルーチンをコール。 | |−−−−−−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−| | S |ファイルネーム(16字まで)を付けてオートスタート形式でテープにセーブ。 | |−−−−−−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−| | L |テープから機械語プログラムをロードします。 | | |SHIFT+BREAKでこのモニタに戻ります。 | |−−−−−−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−| | X |ブロック転送します。 | |−−−−−−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−| | M |128バイトごとのチェックサムを表示します。 | |−−−−−−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−| | P xxxx yyyy|プリンタ指定領域のチェックサム付ダンプを出力。 | |−−−−−−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−| | SHIFT+BREAK|SP-1002へ戻ります。 | ・−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−・ ・−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−・ |表2 EXITモードのコマンドサマリ      ※xxxx,yyyyは4桁の16進数 | |−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−| |コマンド|           機        能           | |−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−| | J  |ダンプチェンジ。 カーソルが画面の最上段、左端に移る。 | |    |ここで新しいアドレスを入力。 | |−−−−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−| | N  |ページチェンジ。 画面の次のアドレスからダンプする。 | |−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−| | U  |アスキー入力、カーソルが右のアスキー欄に移り、以降キー入力をアスキーコードとして | |    |メモリにストアする。 16進キー入力に戻るにはCLRキー | |−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−| | HOME |カーソルを画面の最初のダンプ・内容のところに移動する。 | |−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−| | INST |4ビット単位のインサート。 カーソル位置に0が入り、その行の残りは終りまで | |    |右にずれる。 行の終りの4ビットは消える | |−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−| | DEL  |4ビット単位のデリート。 カーソルの1つ左が消えて、その行は4ビットづつ左に  | |    |ずれて行の終りに0が入る | |−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−| | CR |カーソルが次の行の先頭に移動 | |−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−| |SHIFT+ |モニタのコマンド待ちへ戻る、画面はそのまま | |  BREAK| | ・−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−・